package edu.ccut.saturn.manager.bundles.core;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import edu.ccut.saturn.component.ComponentManager;
import edu.ccut.saturn.component.DefaultComponent;
import edu.ccut.saturn.component.IComponentInfo;
import edu.ccut.saturn.component.IParameterContext;
import edu.ccut.saturn.component.IParameterInfo;
import edu.ccut.saturn.component.IValidateInfo;
import edu.ccut.saturn.component.IValidateUseInfo;
import edu.ccut.saturn.component.impl.SaturnLogicComponentInfo;

public class GetParamValidateDetail extends DefaultComponent {
	@Override
	public void execute(IParameterContext parameterContext) throws Exception {

		String fullKey = (String) parameterContext.getParameterValue(0);
		String nodeId = (String) parameterContext.getParameterValue(1);		
		String paramId = (String) parameterContext.getParameterValue(2);		
		String validateInfoFullKey = (String) parameterContext.getParameterValue(3);

		IComponentInfo componentInfo = ComponentManager.getInstance()
				.getComponentInfo(fullKey);
		List<IParameterInfo> paramInfos = ((SaturnLogicComponentInfo) componentInfo)
				.getNodeInfo(nodeId).getParameterInfos();
		IParameterInfo paramInfo = paramInfos
				.get(Integer.parseInt(paramId) - 1);
		IValidateUseInfo validateUse = paramInfo.getValidateUses();
		
		List<IValidateInfo> validateList = new ArrayList<IValidateInfo>();

		if(validateUse != null){		
			validateList = validateUse.getValidateInfos();
		}
         
		for(IValidateInfo validateInfo : validateList){
			if(validateInfo.getValidateInfoFullkey().equals(validateInfoFullKey)) {
				List<String> eventList = validateInfo.getEventInfos();				
				List<String> argList = validateInfo.getArgs();				
				String validateName = validateInfo.getName();
				Map<String, String> errorMap = validateInfo.getErrorInfos();
				String validateType = validateInfo.getValidateType();
				String descreption = validateInfo.getDescription();
			    
				parameterContext.setParameter(4, eventList);	
				parameterContext.setParameter(5, argList);
				parameterContext.setParameter(6, validateName);
				parameterContext.setParameter(7, errorMap);
				parameterContext.setParameter(8, validateType);
				parameterContext.setParameter(9, descreption);				
			}
		}
	}
}